<?php


	/*
	 * Classe che rappresenta un Calciatore
	 * 
	 */
	class Calciatore {
		private $id;
		private $nome;
		private $ruolo;
		private $squadra;
		private $costo;
		private $stato;
		private $quotazione;
		
		public function __construct($id, $nome, $ruolo, $squadra, $costo, $stato){
			$this->id = $id;
			$this->nome = $nome;
			$this->ruolo = $ruolo;
			$this->squadra = $squadra;
			$this->costo = $costo;
			$this->stato = $stato;
			
		}
		
		public function __destruct(){
			unset($this->id);
			unset($this->nome);
			unset($this->ruolo);
			unset($this->squadra);
			unset($this->costo);
			unset($this->stato);
		}
		
		public function getId(){
			return $this->id;
		}
		
		public function getNome(){
			return $this->nome;
		}
		
		public function getRuolo(){
			return $this->ruolo;
		}
		
		public function getSquadra(){
			return $this->squadra;
		}
		
		public function getStato(){
			return $this->stato;
		}
		
		public function getCosto(){
			return $this->costo;
		}
		
		public function setQuotazione($quotazione){
			$this->quotazione = $quotazione;
		}
		
		public function getQuotazione(){
			return $this->quotazione;
		}
		
	}
	
	
	class CalciatoreFormazione extends Calciatore {
		
		private $formazione; //posizione nella formazione
		private $desc_form; //descrizione della posizione
		private $media_voto;
		
		public function __construct($id, $nome, $ruolo, $squadra, $formazione, $desc_form, $avgVote){
			parent::__construct($id, $nome, $ruolo, $squadra,0, 'A'); //il costo in questo contesto non ha importanza
			$this->formazione = $formazione;
			$this->desc_form = $desc_form;
			$this->media_voto = $avgVote;
		}
		
		public function getFormazione(){
			return $this->formazione;
		}
		
		public function getDescrizione(){
			return $this->desc_form;
		}
		
		public function setFormazione($newPos){
			$this->formazione = $newPos;
			$this->desc_form = Formazione::getPosizioneFormazione($newPos);
		}
		
		public function getMediaVoto(){
			return $this->media_voto;
		}
		
	} //end class CalciatoreFormazione
	
	class CalciatoreVuoto extends CalciatoreFormazione {
		
		public function __construct(){
			parent::__construct(-1, "", "", -1, 5, "",0.0);
		}
	}
	
	class VotoCalciatore{
		public $id;
		public $ruolo;
		public $voto;
		public $nome;
		public $golFatto = 0;
		public $golSubito = 0;
		public $rigoreParato = 0;
		public $rigoreSbagliato = 0;
		public $rigoreSegnato = 0;
		public $autorete = 0;
		public $ammonizione = 0;
		public $espulsione = 0;
		public $assist = 0;
		public $assist_fermo = 0;
		public $gdv = 0;
		public $giornataA;
		
		/*public function __construct(){
			
		}*/
		
		public function __construct($vector){
		/* $vector deve essere un elemento dell'array restituito dalla funzione DbDriver::db_getVoti */
			if($vector != null ){
				$this->nome = $vector[0];
				$this->ruolo = $vector[1];
				$this->giornataA = $vector[2];
				$this->id = $vector[3];
				$this->voto = $vector[4];
				$this->golFatto = $vector[5];
				$this->golSubito = $vector[6];
				$this->rigoreParato = $vector[7];
				$this->rigoreSbagliato = $vector[8];
				$this->rigoreSegnato = $vector[9];
				$this->autorete = $vector[10];
				$this->ammonizione = $vector[11];
				$this->espulsione = $vector[12];
				$this->assist = $vector[13];
				$this->assist_fermo = $vector[14];
				$this->gdv = $vector[15];
			}
		}
		
		public function getFantaVoto(){
			$fanta_voto = 0;
			if($this->voto == "6*" || $this->voto=="-"){
				$fanta_voto = 0;
			}else {
				$fanta_voto = $this->voto +
					$this->golFatto * 3 +
					$this->golSubito * -1 +
					$this->rigoreParato * 3 +
					$this->rigoreSbagliato * -3 +
					$this->rigoreSegnato * 2 +
					$this->autorete * -2 +
					$this->ammonizione * -0.5 +
					$this->espulsione * -1 +
					$this->assist * 1 +
					$this->assist_fermo * 0.5 + 
					$this->gdv * 0;
			}
			$fanta_voto = round($fanta_voto, 1);
			$decimale = abs((int)$fanta_voto - $fanta_voto);
			if($decimale > 0.5){
				$decimale = 1.0;
			}elseif($decimale < 0.5){
				$decimale = 0;
			}
			$fanta_voto = (int)$fanta_voto + $decimale;
			return $fanta_voto;
		}
		
		public static function caricaVoti($giornata){
			$db  = new DbDriver();
			return $db->db_getVoti($giornata);
		}
		
		public static function getHeaderHTML(){
		/* Restituisce una riga HTML con le intestazioni dei valori
		 * del calciatore */
		//F.V. V.U. GF GS RP RF RS AG AM ES AS
			return "
			<tr>
				<td class='headerResult' >Ruolo</td>
				<td class='headerResult' >Giocatore</td>
				<td class='headerResult' >F.V.</td>
				<td class='headerResult' >V.U.</td>
				<td class='headerResult' >GF</td>
				<td class='headerResult' >GS</td>
				<td class='headerResult' >RP</td>
				<td class='headerResult' >RF</td>
				<td class='headerResult' >RS</td>
				<td class='headerResult' >AG</td>
				<td class='headerResult' >AM</td>
				<td class='headerResult' >ES</td>
				<td class='headerResult' >AS</td>
			</tr>";
			
		}
		
		public function serializeHTML(){
		/* Restituisce una riga HTML con i dettagli di questo calciatore */
			$riga = "";
			$riga = sprintf("
			<tr>
				<td class='rowResult' >%s</td>
				<td class='rowResult' >%s</td>
				<td class='rowResult' >%s</td>
				<td class='rowResult' >%s</td>
				<td class='rowResult' >%s</td>
				<td class='rowResult' >%s</td>
				<td class='rowResult' >%s</td>
				<td class='rowResult' >%s</td>
				<td class='rowResult' >%s</td>
				<td class='rowResult' >%s</td>
				<td class='rowResult' >%s</td>
				<td class='rowResult' >%s</td>
				<td class='rowResult' >%s</td>
			</tr>"
			, 
				$this->ruolo,
				$this->nome,
				$this->getFantaVoto(),
				getValue($this->voto),
				getValue($this->golFatto),
				getValue($this->golSubito),
				getValue($this->rigoreParato),
				getValue($this->rigoreSbagliato),
				getValue($this->rigoreSegnato),
				getValue($this->autorete),
				getValue($this->ammonizione),
				getValue($this->espulsione),
				getValue($this->assist + $this->assist_fermo * 0.5)				
			);
			return $riga;
		}
		
	}
	
	function getValue($valore){
	/* restituisce - se valore == 0*/
		return $valore==0 ? "-" : $valore;
	}
	
	class StatCalciatore {
		private $idGiocatore;
		private $ruolo;
		private $squadra;
		private $nome;
		private $mediaVoto;
		private $mediaFantaVoto;
		private $gol;
		private $ammoninizioni;
		private $espulsioni;
		private $votoMeno0;
		private $votoMeno1;
		private $votoMeno2;
		private $votoMeno3;
		private $votoMeno4;
		private $votoMeno5;
		private $giocate;
		private $ultimaGiornata;
		
		public function __construct($vector){
			$this->idGiocatore = $vector[0];
			$this->ruolo = $vector[1];
			$this->nome = $vector[2];
			$this->squadra = $vector[3];
			$this->gol = $vector[4];
			$this->ammonizioni = $vector[5];
			$this->espulsioni = $vector[6];
			$this->mediaVoto = $vector[7];
			$this->mediaFantaVoto = $vector[8];
			$this->votoMeno0 = $vector[9];
			$this->votoMeno1 = $vector[10];
			$this->votoMeno2 = $vector[11];
			$this->votoMeno3 = $vector[12];
			$this->votoMeno4 = $vector[13];
			$this->votoMeno5 = $vector[14];
			$this->giocate = $vector[15];
			$this->ultimaGiornata = $vector[16];
		}
		
		public static function getStatCalciatori($ordinamento, $filtro){
		/* Crea e restituisce un array di statistiche sui calciatori ordinamenti in base all'ordinamento passato */
			$db = new DbDriver();
			$stat = $db->db_getGiocatoriStat($ordinamento, $filtro);
			$players_stats = Array();
			if(count($stat) > 0 ){
				foreach($stat as $c){
					array_push($players_stats, new StatCalciatore($c));
				}
			}
			return $players_stats;
		}
		
		public function getId(){
			return $this->idGiocatore;
		}
		
		public function getNome(){
			return $this->nome;
		}
		
		public function getSquadra(){
			return $this->squadra;
		}
		
		public function getRuolo(){
			return $this->ruolo;
		}
		
		public function getGol(){
			return $this->gol;
		}
		
		public function getAmmonizioni(){
			return $this->ammonizioni;
		}
		
		public function getEspulsioni(){
			return $this->espulsioni;
		}
		
		public function getMediaVoto(){
			return round($this->mediaVoto, 2);
		}
		
		public function getMediaFantaVoto(){
			return round($this->mediaFantaVoto, 2);
		}
		
		public function getVotoGMeno0(){
			return $this->votoMeno0;
		}
		
		public function getVotoGMeno1(){
			return $this->votoMeno1;
		}
		
		public function getVotoGMeno2(){
			return $this->votoMeno2;
		}
		
		public function getVotoGMeno3(){
			return $this->votoMeno3;
		}
		
		public function getVotoGMeno4(){
			return $this->votoMeno4;
		}
		
		public function getVotoGMeno5(){
			return $this->votoMeno5;
		}
		
		public function getGiocate(){
			return $this->giocate;
		}
		
		public function getUltimaGiornata(){
			return $this->ultimaGiornata == 0 ? 6 : $this->ultimaGiornata;
		}
		
		public function getAndamento(){
			//return "&nbsp;";
			if(strpos($_SERVER['HTTP_USER_AGENT'], "MSIE") > 0){
				return "
			 	<ul class='minigrafico'>
			 		<li class='minigrafico p1 " . $this->getHClass($this->getVotoGMeno5()) . "'><span class='minigrafico'>" . $this->getVotoGMeno5() . "<span></li>
				 	<li class='minigrafico p1 " . $this->getHClass($this->getVotoGMeno4()) . "'><span class='minigrafico'>" . $this->getVotoGMeno4() . "<span></li>
				 	<li class='minigrafico p2 " . $this->getHClass($this->getVotoGMeno2()) . "'><span class='minigrafico'>" . $this->getVotoGMeno3() . "<span></li>
				 	<li class='minigrafico p3 " . $this->getHClass($this->getVotoGMeno2()) . "'><span class='minigrafico'>" . $this->getVotoGMeno2() . "<span></li>
				 	<li class='minigrafico p4 " . $this->getHClass($this->getVotoGMeno1()) . "'><span class='minigrafico'>" . $this->getVotoGMeno1() . "<span></li>
				 	<li class='minigrafico p5 " . $this->getHClass($this->getVotoGMeno0()) . "'><span class='minigrafico'>" . $this->getVotoGMeno0() . "<span></li>
			 	</ul>";
			}else {
				$id = $this->getId();
				$v0 = $this->getHeight($this->getVotoGMeno0());
				$v1 = $this->getHeight($this->getVotoGMeno1());
				$v2 = $this->getHeight($this->getVotoGMeno2());
				$v3 = $this->getHeight($this->getVotoGMeno3());
				$v4 = $this->getHeight($this->getVotoGMeno4());
				$v5 = $this->getHeight($this->getVotoGMeno5());
				$lastDay = $this->getUltimaGiornata();
				return "<canvas width='80px' height='20px' id='cs" . $id . "'></canvas>" . 
					sprintf('<script language="javascript" type="text/javascript">createGraphic(%s,%f, %f, %f, %f, %f, %f, %d);</script>'
				,  '"cs' . $id . '"',$v0, $v1, $v2, $v3, $v4, $v5, $lastDay);
			}
		}
		
	
		private function getHeight($voto){
			return round($voto, 1);
		}
		
		private function getHClass($voto){
			return "h-" . (string)(round($voto, 1) * 10);
		}
		
	} //end class StatCalciatore
	
	class MigliorCalciatore {
	//contiene le informazioni per calcolare la miglior formazione
		private $id;
		private $nome;
		private $ruolo;
		private $squadra;
		private $fanta_voto;
		private $stagione;
		
		public function __construct($id, $ruolo, $nome, $squadra, $fanta_voto, $stagione){
			$this->id = $id;
			$this->nome = $nome;
			$this->ruolo = $ruolo;
			$this->squadra = $squadra;
			$this->fanta_voto = $fanta_voto;
			$this->stagione = $stagione;
		}
		
		public function getId(){
			return $this->id;
		}
		
		public function getNome(){
			return $this->nome;
		}
		
		public function getRuolo(){
			return $this->ruolo;
		}
		
		public function getSquadra(){
			return $this->squadra;
		}
		
		public function getFV(){
			return $this->fanta_voto;
		}
		
		public function getStagione(){
			return $this->stagione;
		}
		
		public static function getHeaderHTML(){
		/* Restituisce una riga HTML con le intestazioni dei valori
		 * del calciatore */
		//F.V. V.U. GF GS RP RF RS AG AM ES AS
			return "
			<tr>
				<td class='headerResult' >Ruolo</td>
				<td class='headerResult' >Giocatore</td>
				<td class='headerResult' >F.V.</td>
			</tr>";
			
		}
		
		public function serializeHTML(){
		/* Restituisce una riga HTML con i dettagli di questo calciatore */
			$riga = "";
			$riga = sprintf("
			<tr>
				<td class='rowResult' >%s</td>
				<td class='rowResult' >%s</td>
				<td class='rowResult' >%s</td>
			</tr>"
			, 
				$this->ruolo,
				$this->nome,
				$this->fanta_voto
			);
			return $riga;
		}
		
	} //end class MigliorCalciatore

	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	

	 
?>